package opf5.entities.inscripciones;

import java.util.List;

import opf5.entities.dominio.Inscripcion;
import opf5.entities.dominio.Jugador;
import opf5.entities.dominio.Partido;
import opf5.entities.excepciones.OperacionNoPermitidaException;
import opf5.persistencia.OPF5DBGateway;
import opf5.persistencia.proxies.InscripcionDBProxy;

public abstract class InscripcionConcreta implements Inscripcion {
	protected Jugador jugador;
	
	public InscripcionConcreta(Jugador jugador) {
		this.jugador = jugador;
	}
	
	@Override
	public abstract boolean tieneMasPrioridadQue(Inscripcion modalidad);
	
	@Override
	public Jugador getJugador() {
		return this.jugador;
	}

	@Override
	public void confirmarVacante(Partido partido) {
		List<Inscripcion> inscripciones = partido.getInscripciones();
		
		if (hayLugar(inscripciones))
			return;
		
		if (this.hayInscripcionDeMenorPrioridad(inscripciones)) {
			removerInscripcionDeMenorPrioridad(inscripciones);
			return;
		}

		throw (new OperacionNoPermitidaException("No hay vacantes para "
				+ "el partido con esta modalidad de inscripcion"));
	}

	private boolean hayLugar(List<Inscripcion> inscripciones) {
		return inscripciones.size() < 10;
	}

	private boolean hayInscripcionDeMenorPrioridad(
			List<Inscripcion> inscripciones) {
		Inscripcion inscripcionDeMenorPrioridad = getInscripcionDeMenorPrioridad(inscripciones);
		return inscripcionDeMenorPrioridad != null;
	}

	private void removerInscripcionDeMenorPrioridad(
			List<Inscripcion> inscripciones) {
		Inscripcion inscripcionDeMenorPrioridad = getInscripcionDeMenorPrioridad(inscripciones);
		inscripciones.remove(inscripcionDeMenorPrioridad);
	}

	private Inscripcion getInscripcionDeMenorPrioridad(
			List<Inscripcion> inscripciones) {
		Inscripcion inscripcionDeMenorPrioridad = null;
		for (Inscripcion i: inscripciones)
			if (this.tieneMasPrioridadQue(i)) {
				inscripcionDeMenorPrioridad = i;
				break;						
			}
		
		return inscripcionDeMenorPrioridad;
	}
	
	@Override
	public String toString() {
		return "Condicional";
	}
}
